package com.ruoyi.system.domain;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.ToString;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 项目进度对象 t_project_progress
 *
 * @author Mr.wei
 * @date 2020-10-13
 */
@Data
@ToString
@EqualsAndHashCode
@NoArgsConstructor
@Accessors(chain = true)
@TableName("t_project_progress")
public class ProjectProgress implements Serializable {

    private static final long serialVersionUID = 1L;


    /**
     * 项目id
     */
    @TableId(value = "id")
    private Long id;


    /**
     * 项目编号
     */
    @Excel(name = "项目编号")
    @TableField("p_number")
    private String pNumber;

    /**
     * 父id
     */
    @TableField("p_id")
    private Long pId;

    /**
     * 层级
     */
    @TableField("sub_number")
    private Integer subNumber;

    /**
     * 项目名称/任务名称
     */
    @Excel(name = "项目名称/任务名称")
    @TableField("p_name")
    private String pName;

    /**
     * 项目负责人
     */
    @Excel(name = "项目负责人", dictType = "dict_sys_user_name", combo = true)
    @TableField("principal")
    private String principal;


    /**
     * 项目进度
     */
    @Excel(name = "项目进度", cellType = Excel.ColumnType.NUMERIC)
    @TableField("progress")
    private BigDecimal progress;

    /**
     * 计划工期
     */
    @Excel(name = "计划工期")
    @TableField("forecast_date")
    private String forecastDate;

    /**
     * 预计开始时间
     */
    @Excel(name = "计划开始时间", width = 30, dateFormat = "yyyy/MM/dd", prompt = "日期格式2020/01/01")
    @JsonFormat(pattern = "yyyy-MM-dd")
    @TableField("forecast_start_time")
    private Date forecastStartTime;

    /**
     * 预计结束时间
     */
    @Excel(name = "计划完成时间", width = 30, dateFormat = "yyyy/MM/dd", prompt = "日期格式2020/01/01")
    @JsonFormat(pattern = "yyyy-MM-dd")
    @TableField("forecast_end_time")
    private Date forecastEndTime;


    /**
     * 实际工期
     */
    @Excel(name = "实际工期")
    @TableField("actual_date")
    private String actualDate;

    /**
     * 实际开始时间
     */
    @Excel(name = "实际开始时间", width = 30, dateFormat = "yyyy/MM/dd", prompt = "日期格式2020/01/01")
    @JsonFormat(pattern = "yyyy-MM-dd")
    @TableField("actual_start_time")
    private Date actualStartTime;

    /**
     * 实际结束时间
     */
    @Excel(name = "实际完成时间", width = 30, dateFormat = "yyyy/MM/dd", prompt = "日期格式2020/01/01")
    @JsonFormat(pattern = "yyyy-MM-dd")
    @TableField("actual_end_time")
    private Date actualEndTime;

    /**
     * 参与人
     */
    @TableField("participant")
    private String participant;

    /**
     * 参与人名称
     */
    @Excel(name = "参与人名称", prompt = "逗号拼接中英文都可以")
    @TableField("participant_name")
    private String participantName;

    /**
     * 工作成果
     */
    @Excel(name = "工作成果", prompt = "逗号拼接不需要书名号")
    @TableField("achievements")
    private String achievements;

    /**
     * 工作成果预期数
     */
    @TableField("achievement_number")
    private Integer achievementNumber;


    /**
     * 子集
     */
    @TableField(exist = false)
    private List<Map<String, Object>> children = new ArrayList<>();

    /**
     * 当前阶段
     */
    @TableField(exist = false)
    private Integer currentStage;

    /**
     * 启动阶段
     */
    @TableField(exist = false)
    private Integer startStage;

    /**
     * 标记
     */
    @TableField("mark")
    private Integer mark;

    /**
     * 删除标志（1代表存在 0代表删除）
     */
    private String delFlag;

    /**
     * 创建者
     */
    private String createBy;

    /**
     * 创建时间
     */
    private Date createTime;

    /**
     * 更新者
     */
    private String updateBy;

    /**
     * 更新时间
     */
    private Date updateTime;

    /**
     * 备注
     */
    private String remark;

}
